package com.yeung.alo;

import javax.swing.*;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Lambda_L {
    public static void main(String[] args) {
        //1.
        new Thread(() -> System.out.println("this is from lambda expression")).start();

        //2. too much code, for too little to do
        JButton show = new JButton("Show");
        // Java 8方式：
        show.addActionListener((e) -> {
            System.out.println("Light, Camera, Action !! Lambda expressions Rocks");
        });
        //3. 使用lambda表达式对列表进行迭代
        // Java 8之后：
        List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
        features.forEach(n -> System.out.println(n));

        // 使用Java 8的方法引用更方便，方法引用由::双冒号操作符标示，
        // 看起来像C++的作用域解析运算符
        features.forEach(System.out::println);

        //4、使用lambda表达式和函数式接口Predicate
        features.stream().map((String o) -> o.toCharArray()).forEach(System.out::println);

        // 使用lambda表达式
        List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
        costBeforeTax.stream().map((cost) -> cost + (.12 + cost)).limit(2).forEach(System.out::println);
        // 用所有不同的数字创建一个正方形列表
        List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
        List<Integer> distinct = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
    }

}
